package com.snail.clouds.framework.service;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.snail.clouds.framework.entity.UserProfile;
import com.snail.clouds.framework.mapper.UserProfileMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

/**
 * 用户信息服务类
 */
@Slf4j
@Service
public class UserProfileService extends ServiceImpl<UserProfileMapper, UserProfile> {
    
//    private final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
    
    /**
     * 根据用户编码获取用户信息
     * @param user_code 用户编码
     * @return 用户信息
     */
    public UserProfile getByUserCode(String user_code) {
        log.info("根据用户编码查询用户信息，用户编码: {}", user_code);
        UserProfile user = this.getOne(
            new com.baomidou.mybatisplus.core.conditions.query.QueryWrapper<UserProfile>()
                .eq("user_code", user_code)
                .eq("deleted", 0)
        );
        log.info("查询结果，用户: {}", user);
        return user;
    }
    
    /**
     * 检查用户编码是否存在
     * @param user_code 用户编码
     * @return 是否存在
     */
    public boolean existsByUserCode(String user_code) {
        log.info("检查用户编码是否存在，用户编码: {}", user_code);
        boolean exists = this.count(
            new com.baomidou.mybatisplus.core.conditions.query.QueryWrapper<UserProfile>()
                .eq("user_code", user_code)
                .eq("deleted", 0)
        ) > 0;
        log.info("用户编码存在性检查结果: {}", exists);
        return exists;
    }
    
    /**
     * 创建用户并加密密码
     * @param user 用户信息
     * @return 是否创建成功
     */
    @Override
    public boolean save(UserProfile user) {
        log.info("保存用户信息，用户编码: {}", user.getUserCode());
        // 检查密码是否为空
        if (user.getPassword() == null || user.getPassword().isEmpty()) {
            log.warn("密码不能为空，用户编码: {}", user.getUserCode());
            throw new RuntimeException("密码不能为空");
        }
        
        // 加密密码
//        if (user.getPassword() != null && !user.getPassword().startsWith("$2a$")) {
//            user.setPassword(passwordEncoder.encode(user.getPassword()));
//        }
        boolean result = super.save(user);
        log.info("用户保存结果: {}, 用户ID: {}", result, user.getId());
        return result;
    }
    
    /**
     * 更新用户信息，如果包含密码则加密
     * @param user 用户信息
     * @return 是否更新成功
     */
    @Override
    public boolean updateById(UserProfile user) {
        log.info("更新用户信息，用户ID: {}", user.getId());
        // 如果包含密码且未加密，则进行加密
//        if (user.getPassword() != null && !user.getPassword().startsWith("$2a$")) {
//            user.setPassword(passwordEncoder.encode(user.getPassword()));
//        }
        boolean result = super.updateById(user);
        log.info("用户更新结果: {}", result);
        return result;
    }
}